Skip to content

chore(dev): add linux dev container for macos hosts - #1896

Open
jog1t wants to merge 4 commits into
mainfrom
claude/fetch-override-pipeline-fixes-r6pul1
Open

chore(dev): add linux dev container for macos hosts#1896
jog1t wants to merge 4 commits into
mainfrom
claude/fetch-override-pipeline-fixes-r6pul1

Conversation

@jog1t

@jog1t jog1t commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

agentOS runs Linux-only, so the engine, sidecar, and VMs live in a
container while the working tree stays on the host. node_modules, the
cargo target, and the toolchain build trees are container-owned volumes
so host edits are visible without dragging darwin-native binaries into
Linux.

jog1t added 3 commits August 6, 2026 00:25
agentOS runs Linux-only, so the engine, sidecar, and VMs live in a
container while the working tree stays on the host. node_modules, the
cargo target, and the toolchain build trees are container-owned volumes
so host edits are visible without dragging darwin-native binaries into
Linux.
…tem tab

- Buffer ReadableStream request bodies and strip `duplex`. Chrome
  requires HTTP/2 for request streaming, so every action POST failed
  with ERR_ALPN_NEGOTIATION_FAILED over cleartext HTTP/1.1.
- Attach by actor id via `getForId(...).connect()`. The previous
  `useActor({name, id})` call passed a field that does not exist behind
  a type-suppressing cast, so no tab received live events.
- Normalize omitted `args` in the process tree, which threw on render.
- Give the VM state chip the bordered pill treatment its neighbours use.
Interactive PTY shells in the dashboard, rendered with Ghostty's VT
parser. Input is raw passthrough: the kernel's line discipline owns
echo, editing, and signal generation.

Shell enumeration is server-owned. A shell outlives the page that opened
it and holds the VM awake, so a client that lost its page must still be
able to find it; `listShells` replaces any client-side tracking.

The actor also keeps a headless emulator per shell, fed the same chunks
it broadcasts, and serializes it back to ANSI on demand. Without it a
reattaching client sees a blank pane until the guest repaints, which a
full-screen program never does unprompted. Every broadcast carries a
sequence number matching the snapshot's, so a client applies the repaint
and then only the chunks past it.

Also fixes `health.booted`, which was permanently false: racing a
settled promise against an immediate value always loses, because
`.catch()` still schedules a microtask.
@railway-app

railway-app Bot commented Aug 5, 2026

Copy link
Copy Markdown

🚅 Deployed to the agentos-pr-1896 environment in agentos

Service Status Web Updated (UTC)
agentos ✅ Success (View Logs) Web Aug 7, 2026 at 6:46 pm

🚅 Environment agentos-pr-1896 in rivet-frontend has no services deployed.

@railway-app
railway-app Bot temporarily deployed to agentos / agentos-pr-1896 August 5, 2026 23:05 Destroyed
@railway-app
railway-app Bot temporarily deployed to agentos / agentos-pr-1895 August 5, 2026 23:06 Destroyed
@jog1t
jog1t force-pushed the claude/fetch-override-pipeline-fixes-r6pul1 branch from 2bb2f11 to 2291145 Compare August 5, 2026 23:08
@railway-app
railway-app Bot temporarily deployed to agentos / agentos-pr-1896 August 5, 2026 23:08 Destroyed
Remove the globalThis.fetch override (fetch-compat.ts) that buffered
ReadableStream request bodies for HTTP/1.1 compatibility. Export
ShellSnapshot and ShellReplayMode from the package index so downstream
consumers (agentos-apps) can name them in generated declarations.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant